package com.zw.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zw.object.result.Result;
import com.zw.object.system.SysUser;
import com.zw.object.vo.AssginRoleVo;
import com.zw.object.vo.LoginVo;
import com.zw.object.vo.SysUserQueryVo;

import java.util.List;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author zw
 * @since 2022-12-06
 */
public interface SysUserService extends IService<SysUser> {

    /**
     *                          获取用户分页列表业务
     * @param iPage             mp 分页对象
     * @param sysUserQueryVo    参数实体类
     * @return                  Result
     */
    Result sysUserListPage(IPage<SysUser> iPage, SysUserQueryVo sysUserQueryVo);

    /**
     *              根据用户ID获取信息
     * @param id    用户ID
     * @return      Result
     */
    Result getUserByUserId(String id);

    /**
     *                  用户保存业务
     * @param sysUser   用户参数实体类
     * @return          Result
     */
    Result saveSysUser(SysUser sysUser);

    /**
     *                  更新用户业务
     * @param sysUser   更新用户参数实体类
     * @return          Result
     */
    Result updateSysUSer(SysUser sysUser);

    /**
     *              根据用户ID删除用户
     * @param id    用户ID
     * @return      Result
     */
    Result removeSysUserById(String id);

    /**
     *              用户批量删除业务
     * @param ids   用户id集合
     * @return      Result
     */
    Result batchRemove(List<String> ids);

    /**
     *                  根据用户ID更新用户状态业务
     * @param id        用户ID
     * @param status    用户状态
     * @return          Result
     */
    Result updateUserStatus(String id, Integer status);

    /**
     *                  根据用户ID获取用户角色数据业务
     * @param userId    用户ID
     * @return          Result
     */
    Result toAssign(String userId);

    /**
     *                          根据用户ID分配角色业务
     * @param assginRoleVo      参数实体类对象
     * @return                  Result
     */
    Result saveUserRole(AssginRoleVo assginRoleVo);

    /**
     *                  用户登录业务
     * @param loginVo   用户登录参数实体类
     * @return          Result
     */
    Result Login(LoginVo loginVo);

    /**
     *                  获取用户信息业务
     * @param token     Token
     * @return          Result
     */
    Result info(String token);

    /**
     *                      根据用户名获取对象
     * @param username      用户姓名
     * @return              SysUser
     */
    SysUser getUserByUsername(String username);
}
